﻿//using System;
//using System.Collections.Generic;
//using Microsoft.VisualStudio.TestTools.UnitTesting;
//using Microsoft.WVB.Framework;
//using System.Windows;
//using System.Reflection;
//using Microsoft.WVB.Silverlight.Infrastructure;
//using Microsoft.Practices.Composite.Wpf.Events;

//namespace Microsoft.WVB.UnitTest.Client.MediatorTests
//{
//    #region TestServices
//    public class A
//    {
//        public string WasHere { get; set; }
//        public void HandleSomething(object e)
//        {
//            WasHere = "Jimmy";
//        }
//    }
//    public class B
//    {
//        public string WasHere { get; set; }

//        [MediatorEventHandler("TESTING", ThreadOption.UIThread)]
//        public void HandleSomething(EventArgs e)
//        {
//            WasHere = "Jimmy";
//        }
//        [MediatorEventHandler("TESTING2", ThreadOption.UIThread)]
//        public void HandleSomething2(EventArgs e)
//        {
//            WasHere = "Johnny";
//        }
//    }
//    public class C
//    {
//        public string WasHere { get; set; }
//        [MediatorEventHandler("TESTING", ThreadOption.UIThread)]
//        [MediatorEventHandler("TESTING2", ThreadOption.UIThread)]
//        public void HandleSomething(EventArgs e)
//        {
//            WasHere = "Jimmy";
//        }
//    }
//    public class D
//    {
//        int i = 0;
//        public string WasHere { get; set; }

//        [MediatorEventHandler("TESTING", ThreadOption.UIThread)]
//        public void HandleSomething(EventArgs e)
//        {
//            ++i;
//            WasHere = "Jimmy" + i.ToString();
//        }
//        [MediatorEventHandler("TESTING", ThreadOption.UIThread)]
//        public void HandleSomething2(EventArgs e)
//        {
//            ++i;
//            WasHere = "Jimmy" + i.ToString();
//        }
//    }
//    #endregion

//    [TestClass]
//    public class IoC_MediatorTests
//    {
//        [TestInitialize]
//        public void Initialize()
//        {
//            Application.Current.Resources.Clear();
//            IoC.InitializeApplicationResources(Application.Current);
//        }
//        [TestCleanup]
//        public void Cleanup()
//        {
//            Application.Current.Resources.Clear();
//        }
//        [TestMethod]
//        public void ManualRegistration()
//        {
//            IDIContainer dic = IoC.CurrentApplicationDIContainer;
//            dic.Register<A>((c) => new A());
//            A a = dic.GetCreate<A>();
//            IMediator med = IoC.CurrentApplicationMediator;

//            ProxyColleague pc = new ProxyColleague(med, (args) => a.HandleSomething(args));
//            med.Register(pc, new string[] { "TESTING" });
//            med.NotifyColleagues("TESTING", new EventArgs());
//            Assert.AreEqual("Jimmy", a.WasHere);
//        }
//        [TestMethod]
//        public void ManualRegistrationInvoke()
//        {
//            IDIContainer dic = IoC.CurrentApplicationDIContainer;
//            dic.Register<A>((c) => new A());
//            A a = dic.GetCreate<A>();
//            IMediator med = IoC.CurrentApplicationMediator;
//            MethodInfo mi = a.GetType().GetMethod("HandleSomething");
//            ProxyColleague pc = new ProxyColleague(med, (args) => mi.Invoke(a, new object[] { args }));
//            med.Register(pc, new string[] { "TESTING" });
//            med.NotifyColleagues("TESTING", new EventArgs());
//            Assert.AreEqual("Jimmy", a.WasHere);
//        }

//        [TestMethod]
//        public void AttributeRegistration()
//        {
//            IDIContainer dic = IoC.CurrentApplicationDIContainer;
//            dic.Register<B>((c) => new B());
//            B b = dic.GetCreate<B>();

//            IMediator med = IoC.CurrentApplicationMediator;
//            med.NotifyColleagues("TESTING", new EventArgs());
//            Assert.AreEqual("Jimmy", b.WasHere);
//        }

//        [TestMethod]
//        public void AttributeRegistrationTwo()
//        {
//            IDIContainer dic = IoC.CurrentApplicationDIContainer;
//            dic.Register<B>((c) => new B());
//            B b = dic.GetCreate<B>();
//            IMediator med = IoC.CurrentApplicationMediator;
//            med.NotifyColleagues("TESTING", new EventArgs());
//            Assert.AreEqual("Jimmy", b.WasHere);
//            med.NotifyColleagues("TESTING2", new EventArgs());
//            Assert.AreEqual("Johnny", b.WasHere);
//        }
//        [TestMethod]
//        public void AttributeRegistrationMulti()
//        {
//            IDIContainer dic = IoC.CurrentApplicationDIContainer;
//            dic.Register<C>((cont) => new C());
//            C c = dic.GetCreate<C>();
//            IMediator med = IoC.CurrentApplicationMediator;
//            med.NotifyColleagues("TESTING", new EventArgs());
//            Assert.AreEqual("Jimmy", c.WasHere);
//            med.NotifyColleagues("TESTING2", new EventArgs());
//            Assert.AreEqual("Jimmy", c.WasHere);
//        }
//        [TestMethod]
//        public void AttributeRegistrationTwoHandlers()
//        {
//            IDIContainer dic = IoC.CurrentApplicationDIContainer;
//            dic.Register<D>((c) => new D());
//            D d = dic.GetCreate<D>();
//            IMediator med = IoC.CurrentApplicationMediator;
//            med.NotifyColleagues("TESTING", new EventArgs());
//            Assert.AreEqual("Jimmy2", d.WasHere);
//        }
//    }
//}
